<Select Style="width: 120px" DefaultValue="@_provinceData[0]" OnChange="OnChange">
    @foreach (var province in _provinceData)
    {
        <SelectOption Value="@province">@province</SelectOption>
    }
</Select>

<Select Style="width: 120px" Value="@_cityValue" OnChange="OnChangeCity">
    @foreach (var city in _cities)
    {
        <SelectOption Value="@city">@city</SelectOption>
    }
</Select>

@using OneOf;
@code
{
    private string _cityValue;
    private string[] _cities = new string[0];
    private readonly string[] _provinceData = new[] { "Zhejiang", "Jiangsu" };

    private readonly Dictionary<string, string[]> _cityData = new Dictionary<string, string[]>
    {
        {"Zhejiang",new[]{ "Hangzhou", "Ningbo", "Wenzhou"}},
        {"Jiangsu",new[]{"Nanjing","Suzhou","Zhenjiang"}}
    };

    protected override void OnParametersSet()
    {
        _cities = _cityData[_provinceData[0]];
        _cityValue = _cities.First();
        base.OnParametersSet();
    }

    private void OnChange(OneOf<string, IEnumerable<string>, LabeledValue, IEnumerable<LabeledValue>> value, OneOf<SelectOption, IEnumerable<SelectOption>> option)
    {
        _cities = _cityData[value.AsT0];
        _cityValue = _cities.First();
        InvokeAsync(StateHasChanged);
        Console.WriteLine($"selected: ${value}");
    }

    private void OnChangeCity(OneOf<string, IEnumerable<string>, LabeledValue, IEnumerable<LabeledValue>> value, OneOf<SelectOption, IEnumerable<SelectOption>> option)
    {
        Console.WriteLine($"selected: ${value}");
    }
}
